home *** CD-ROM | disk | FTP | other *** search
- /*
- * Triton - The object oriented GUI creation system for the Amiga
- * Written by Stefan Zeiger in 1993-1994
- *
- * (c) 1993-1994 by Stefan Zeiger
- * You are hereby allowed to use this source or parts of it for
- * creating programs for AmigaOS which use the Triton GUI creation
- * system. All other rights reserved.
- *
- * Triton linkable library code for GCC - (c) 1994 by Gunther Nikl
- */
-
- #include <utility/hooks.h>
- #include "triton.h"
- #include <inline/graphics.h>
- #include <inline/intuition.h>
- #include <clib/alib_protos.h>
-
- #define ARROWLENGTH 4
- #define LANCELENGTH 2
- #define CURVELENGTH 15
-
- struct IClass *TRIM_trLogo;
-
- /* special defines to save and setup the base register */
-
- #define SETA4(x) asm volatile ("movel a4,sp@-; movel %0,a4" :/* */: "g" (x))
- #define RESA4(x) asm volatile ("movel sp@+,a4;")
-
- /* boopsi functions */
-
- void TR_ScaledPolyDraw(struct RastPort *rport, UWORD len, WORD *array, ULONG orgwid, ULONG orghei, ULONG newwid, ULONG newhei, ULONG left, ULONG top)
- {
- UWORD i;
-
- for(i=0;i<len;i++)
- {
- array[i*2]=((array[i*2]*newwid)/orgwid)+left;
- array[(i*2)+1]=((array[(i*2)+1]*newhei)/orghei)+top;
- }
- Move(rport, array[0], array[1]);
- PolyDraw(rport, len-1, &array[2]);
- }
-
-
- ULONG TRIM_trLogo_DrawBoopsiImage(struct Image *Image, struct impDraw *DrawMsg)
- {
- struct RastPort * RPort = DrawMsg->imp_RPort;
- UWORD BackColor = DrawMsg->imp_DrInfo->dri_Pens[BACKGROUNDPEN],
- TextColor = DrawMsg->imp_DrInfo->dri_Pens[TEXTPEN];
- WORD left = Image->LeftEdge + DrawMsg->imp_Offset.X,
- top = Image->TopEdge + DrawMsg->imp_Offset.Y,
- width = Image->Width,
- height = Image->Height,
- Arrow1Array[ARROWLENGTH*2] = {22,6, 30,2, 26,10, 22,6},
- Arrow2Array[ARROWLENGTH*2] = {34,18, 42,14, 38,22, 34,18},
- Arrow3Array[ARROWLENGTH*2] = {46,30, 54,26, 50,34, 46,30},
- LanceArray[LANCELENGTH*2] = {2,54, 36,20},
- CurveArray[CURVELENGTH*2] = {24,8, 22,10, 20,14, 19,18, 18,22, 19,26, 20,30, 22,34, 26,36, 30,37, 34,38, 38,37, 42,36, 46,34, 48,32};
-
- /* Background */
- SetAfPt(RPort, NULL, -1);
- SetAPen(RPort, BackColor);
- SetDrMd(RPort, JAM1);
- RectFill(RPort, left, top, left+width-1, top+height-1);
-
- /* Adjust size (->square) */
- if(width>height)
- {
- left+=((width-height)/2);
- width=height;
- }
- else if(width<height)
- {
- top+=((height-width)/2);
- height=width;
- }
-
- /* Logo */
- SetAPen(RPort, TextColor);
- TR_ScaledPolyDraw(RPort,ARROWLENGTH,Arrow1Array,56,56,width,height,left,top);
- TR_ScaledPolyDraw(RPort,ARROWLENGTH,Arrow2Array,56,56,width,height,left,top);
- TR_ScaledPolyDraw(RPort,ARROWLENGTH,Arrow3Array,56,56,width,height,left,top);
- TR_ScaledPolyDraw(RPort,LANCELENGTH,LanceArray,56,56,width,height,left,top);
- TR_ScaledPolyDraw(RPort,CURVELENGTH,CurveArray,56,56,width,height,left,top);
-
- return(TRUE);
- }
-
-
- ULONG TRIM_trLogo_DispatchBoopsiImage(/*struct IClass *Class, Object *Object, Msg ObjMsg*/)
- {
- register struct IClass *Class asm("a0");
- register Object *Object asm("a2");
- register Msg ObjMsg asm("a1");
- ULONG retval;
-
- SETA4(Class->cl_Dispatcher.h_Data);
- if (ObjMsg->MethodID==IM_DRAW)
- retval=TRIM_trLogo_DrawBoopsiImage((struct Image *)Object, (struct impDraw *)ObjMsg);
- else
- retval=DoSuperMethodA(Class, Object, ObjMsg);
- RESA4(0);
- return retval;
- }
-
-
- BOOL TRIM_trLogo_Init(VOID)
- {
- register void *a4 asm("a4");
-
- if ((TRIM_trLogo = MakeClass(NULL, IMAGECLASS, NULL, 0, 0)))
- {
- TRIM_trLogo->cl_Dispatcher.h_Entry = (HOOKFUNC)TRIM_trLogo_DispatchBoopsiImage;
- TRIM_trLogo->cl_Dispatcher.h_Data = a4;
- }
- return (TRIM_trLogo!=NULL);
- }
-
-
- VOID TRIM_trLogo_Free(VOID)
- {
- if (TRIM_trLogo)
- {
- FreeClass(TRIM_trLogo); TRIM_trLogo=NULL;
- }
- }
-